Database Transactions এবং SaveChanges মেথড হল Entity Framework (EF) এর গুরুত্বপূর্ণ ফিচার যা ডেটাবেসে একাধিক অপারেশন সম্পন্ন করার সময় ডেটার একনিষ্ঠতা এবং নিরাপত্তা নিশ্চিত করতে সহায়তা করে। যখন আপনি EF এর মাধ্যমে ডেটাবেসে পরিবর্তন করেন, তখন তা একটি ট্রানজেকশন হিসেবে বিবেচিত হয়, যার ফলে একাধিক পরিবর্তন একসাথে সফলভাবে সম্পন্ন হয় অথবা সবগুলো পরিবর্তন ব্যর্থ হলে ডেটাবেসের কোন পরিবর্তনই হয় না।
SaveChanges মেথড EF Context এর মাধ্যমে আপনার মডেল (Entity) এর পরিবর্তনগুলো ডেটাবেসে সেভ করে। এই মেথডটি মূলত সব পরিবর্তন যেমন ইনসার্ট, আপডেট এবং ডিলিট একসাথে ডেটাবেসে প্রেরণ করে।
using (var context = new SchoolContext())
{
var student = context.Students.First();
student.Name = "John Doe";
// SaveChanges মেথড দিয়ে পরিবর্তন সেভ করা
context.SaveChanges();
}
এখানে, SaveChanges মেথডে সমস্ত পরিবর্তন ডেটাবেসে সেভ হয়ে যাবে।
Database Transactions ব্যবহার করলে, আপনি একাধিক ডেটাবেস অপারেশন একসাথে গ্রুপ করতে পারেন, এবং একটিই ত্রুটি হলে পুরো অপারেশনটি রোলব্যাক (rollback) করা হয়। এতে করে ডেটাবেসের ডেটার একনিষ্ঠতা নিশ্চিত করা যায়। EF Context তে ট্রানজেকশন ব্যবস্থাপনা খুব সহজ এবং স্বচ্ছ।
using (var context = new SchoolContext())
{
// ট্রানজেকশন শুরু
using (var transaction = context.Database.BeginTransaction())
{
try
{
var student1 = new Student { Name = "Jane Doe", Age = 21 };
var student2 = new Student { Name = "Sam Smith", Age = 22 };
// প্রথম ইনসার্ট অপারেশন
context.Students.Add(student1);
context.SaveChanges();
// দ্বিতীয় ইনসার্ট অপারেশন
context.Students.Add(student2);
context.SaveChanges();
// যদি সবকিছু ঠিকঠাক থাকে, তাহলে কমিট
transaction.Commit();
}
catch (Exception)
{
// কোনো ত্রুটি হলে, রোলব্যাক
transaction.Rollback();
throw;
}
}
}
এখানে:
EF Core তে আপনি SaveChangesAsync মেথড ব্যবহার করে অ্যাসিঙ্ক্রোনাসভাবে ডেটাবেসে পরিবর্তন সেভ করতে পারেন। এটি দীর্ঘসময় ধরে চলা অপারেশনগুলির জন্য খুব কার্যকরী।
using (var context = new SchoolContext())
{
var student = new Student { Name = "Alice", Age = 23 };
context.Students.Add(student);
// Asynchronousভাবে SaveChanges কল করা
await context.SaveChangesAsync();
}
এখানে SaveChangesAsync মেথডটি অ্যাসিঙ্ক্রোনাসভাবে ডেটাবেসে পরিবর্তন সেভ করে, যা UI থ্রেডে কোনো বিলম্ব সৃষ্টি না করে, অ্যাপ্লিকেশনের পারফরম্যান্স উন্নত করে।
এখন, আপনি যদি ট্রানজেকশন এবং SaveChanges একসাথে ব্যবহার করতে চান, তবে আপনি দুটি অপারেশন একত্রিত করতে পারেন, যাতে একাধিক SaveChanges অপারেশন একযোগে কার্যকরী হয় এবং পুরো ট্রানজেকশনটি একসাথে সেভ হয় বা ব্যর্থ হলে রোলব্যাক হয়।
using (var context = new SchoolContext())
{
using (var transaction = context.Database.BeginTransaction())
{
try
{
var student1 = new Student { Name = "Anna", Age = 24 };
var student2 = new Student { Name = "Peter", Age = 26 };
context.Students.Add(student1);
context.SaveChanges(); // প্রথম SaveChanges
context.Students.Add(student2);
context.SaveChanges(); // দ্বিতীয় SaveChanges
// কমিট যদি সবকিছু ঠিক থাকে
transaction.Commit();
}
catch (Exception)
{
// কোনো ত্রুটি হলে, রোলব্যাক
transaction.Rollback();
throw;
}
}
}
এখানে:
common.read_more